package com.newx.common.core.utils;

import java.util.concurrent.atomic.AtomicLong;

/**
 * 唯一编号生成工具类
 */
public class GeneratorNoUtils {

    private static final long MAX_RANDOM = 1000L; // 3位随机数
    private static final AtomicLong sequence = new AtomicLong(System.currentTimeMillis());


    /**
     * 生产9位数订单编号
     *
     * @param prefix 前缀
     * @return 订单编号
     */
    public static String crateNumber(String prefix) {
        long result = createNineNumber();

        // 组合前缀和数字
        return prefix + String.format("%09d", result);
    }

    /**
     * 生产唯一9位数
     *
     * @return 九位数字
     */
    public static long createNineNumber() {
        long now = System.currentTimeMillis();
        long unique = sequence.updateAndGet(current -> current < now ? now : current + 1);

        // 生成3位随机数
        long random = (long) (Math.random() * MAX_RANDOM);

        // 组合时间戳后6位和3位随机数
        long result = (unique % 1000000) * 1000 + random;

        // 确保结果是9位数
        result = result < 100000000L ? result + 100000000L : result;
        return result;
    }
}
